package com.example.demo_one.kotlin

fun main() {
    val animal = Animal("小猫")
    animal.makeSound()

    val cat = Cat(name = "小猫", age = 3, color = "白色")
    cat.makeSound()

    val dog = Dog(name = "小狗", age = 4, color = "黑色")
    dog.makeSound()
}

// 1 : 基础类
open class Animal(var name: String) {
    open fun makeSound() {
        println("$name 在发出声音")
    }
}

// 2 : 继承类
// 被继承的类必须使用open才可以被继承 , 被继承的方法也需要被open修饰才可以重写
// 子类重写方法必须使用override修饰 ,
// 子类必须调用父类的构造函数 , 也就是下边代码中的name参数
// 第一个参数不许要加var , 单独加的参数使用var
class Cat(name: String, var age: Int, var color: String) : Animal(name) {
    override fun makeSound() {
        super.makeSound()
        println("$name 在喵喵叫 , 年龄:$age , 猫毛:$color")
    }
}

class Dog(name: String, var age: Int, var color: String) : Animal(name) {
    override fun makeSound() {
        super.makeSound()
        println("$name 在汪汪叫 , 年龄:$age , 猫毛:$color")
    }
}